import path from 'path';
import fs from 'fs';
import { KFile } from './KFile.mjs';

/**
 * 文件工具类
 */
export class KFileUtils {

    /**
       * 是否与这些文件路径相似
       * @param {string | KFile} file 文件绝对路径 或 文件对象
       * @param {Array<string>} absoluteFilePaths 绝对路径列表
       * @returns 匹配到的相似的绝对路径
       */
    static like(file, absoluteFilePaths = []) {
        if (typeof file === 'string') { file = new KFile(file); }
        if (!file instanceof KFile) { throw new Error(); }

        for (const absoluteFilePath of absoluteFilePaths) {
            if (file.path.withoutExt === new KFile(absoluteFilePath).path.withoutExt) {
                return absoluteFilePath;
            }
        }
        return false;
    }

    /**
     * 文件是否存在
       * @param {string | KFile} file 文件绝对路径 或 文件对象
     * @param {Array<string>} exts 可能的后缀名列表
     * @returns 文件存在时所使用的后缀名
     */
    static existsByExts(file, exts = []) {
        if (typeof file === 'string') { file = new KFile(file); }
        if (!file instanceof KFile) { throw new Error(); }

        if (file.exists) { return file.name.ext; }
        for (const ext of exts) {
            if (fs.existsSync(file.path.withoutExt + ext)) { return ext; }
        }
        return false;
    }

    /**
     * 判断路径是否为子路径
     * @param {string} dir 子路径
     * @param {string} parent 父路径
     */
    static isSubDir(dir, parent) {
        return dir.startsWith(parent);
    }

}
